{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "100ML_Day3_MultiRegression.ipynb",
      "provenance": [],
      "authorship_tag": "ABX9TyO3fKsAVbup3G8kEpNKUhUS"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "woME5R8jXLQh"
      },
      "source": [
        "# Day 3 - Multi-Linear Regression. "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NqkreUwQXA-4"
      },
      "source": [
        "import numpy as np\r\n",
        "import pandas as pd\r\n",
        "import matplotlib.pyplot as plt\r\n",
        "import seaborn as sns"
      ],
      "execution_count": 35,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "aBerMQvWXYoC"
      },
      "source": [
        "df = pd.read_csv('https://raw.githubusercontent.com/Avik-Jain/100-Days-Of-ML-Code/master/datasets/50_Startups.csv')"
      ],
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 195
        },
        "id": "No4kSZ9xXfMW",
        "outputId": "43d13804-cc67-4df1-c49d-2928d373fd40"
      },
      "source": [
        "df.head()"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>R&amp;D Spend</th>\n",
              "      <th>Administration</th>\n",
              "      <th>Marketing Spend</th>\n",
              "      <th>State</th>\n",
              "      <th>Profit</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>165349.20</td>\n",
              "      <td>136897.80</td>\n",
              "      <td>471784.10</td>\n",
              "      <td>New York</td>\n",
              "      <td>192261.83</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>162597.70</td>\n",
              "      <td>151377.59</td>\n",
              "      <td>443898.53</td>\n",
              "      <td>California</td>\n",
              "      <td>191792.06</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>153441.51</td>\n",
              "      <td>101145.55</td>\n",
              "      <td>407934.54</td>\n",
              "      <td>Florida</td>\n",
              "      <td>191050.39</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>144372.41</td>\n",
              "      <td>118671.85</td>\n",
              "      <td>383199.62</td>\n",
              "      <td>New York</td>\n",
              "      <td>182901.99</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>142107.34</td>\n",
              "      <td>91391.77</td>\n",
              "      <td>366168.42</td>\n",
              "      <td>Florida</td>\n",
              "      <td>166187.94</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   R&D Spend  Administration  Marketing Spend       State     Profit\n",
              "0  165349.20       136897.80        471784.10    New York  192261.83\n",
              "1  162597.70       151377.59        443898.53  California  191792.06\n",
              "2  153441.51       101145.55        407934.54     Florida  191050.39\n",
              "3  144372.41       118671.85        383199.62    New York  182901.99\n",
              "4  142107.34        91391.77        366168.42     Florida  166187.94"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LCHLUJ2PXjMI"
      },
      "source": [
        "#We have to predict profit from other features. "
      ],
      "execution_count": 4,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fyjMTw3lXpFM"
      },
      "source": [
        "# X = df.iloc[:,:-1].values\r\n",
        "# y = df.iloc[:,-1].values\r\n",
        "\r\n",
        "#Do this after Enoding in DF. \r\n",
        "#Or otherwise, Encode in X. "
      ],
      "execution_count": 21,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "G4fi5FrXXxmi",
        "outputId": "468bb505-7f62-4f44-8462-63134a148729"
      },
      "source": [
        "#Encoding Categorical Data\r\n",
        "set(df['State'])"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'California', 'Florida', 'New York'}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WhiqQiHPX0oo"
      },
      "source": [
        "encoded_state = pd.get_dummies(df['State'])"
      ],
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 195
        },
        "id": "YiVf7MloX7oy",
        "outputId": "dee207a7-9484-4c18-d945-d057a2766e3a"
      },
      "source": [
        "#In this, even if we know 2, we know the third. \r\n",
        "#Hence 3 dummies put us into what is called a Dummy Trap. \r\n",
        "#So, we need only 2 Dummies. \r\n",
        "encoded_state.head()"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>California</th>\n",
              "      <th>Florida</th>\n",
              "      <th>New York</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   California  Florida  New York\n",
              "0           0        0         1\n",
              "1           1        0         0\n",
              "2           0        1         0\n",
              "3           0        0         1\n",
              "4           0        1         0"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "xdGeckWWX9Ja"
      },
      "source": [
        "encoded_final = encoded_state.iloc[:,:-1]"
      ],
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 195
        },
        "id": "xyNJ_ItKYVZ_",
        "outputId": "a98bf952-ea68-48b7-8550-0c448b915b00"
      },
      "source": [
        "#There's one other way to dis. \r\n",
        "encode_Direct = pd.get_dummies(df['State'],drop_first=True)\r\n",
        "encode_Direct.head()"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Florida</th>\n",
              "      <th>New York</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Florida  New York\n",
              "0        0         1\n",
              "1        0         0\n",
              "2        1         0\n",
              "3        0         1\n",
              "4        1         0"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nY4PCQusYj1v"
      },
      "source": [
        "df = pd.concat([df,encode_Direct],axis=1)"
      ],
      "execution_count": 13,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wCgptwoTYtg0"
      },
      "source": [
        "df.head()\r\n",
        "df = df.drop('State',axis=1)"
      ],
      "execution_count": 16,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 195
        },
        "id": "BNkeH4E4YukY",
        "outputId": "3ca6f4a2-3e3d-4a8c-93d4-00056489a7e7"
      },
      "source": [
        "df.head()"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>R&amp;D Spend</th>\n",
              "      <th>Administration</th>\n",
              "      <th>Marketing Spend</th>\n",
              "      <th>Profit</th>\n",
              "      <th>Florida</th>\n",
              "      <th>New York</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>165349.20</td>\n",
              "      <td>136897.80</td>\n",
              "      <td>471784.10</td>\n",
              "      <td>192261.83</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>162597.70</td>\n",
              "      <td>151377.59</td>\n",
              "      <td>443898.53</td>\n",
              "      <td>191792.06</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>153441.51</td>\n",
              "      <td>101145.55</td>\n",
              "      <td>407934.54</td>\n",
              "      <td>191050.39</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>144372.41</td>\n",
              "      <td>118671.85</td>\n",
              "      <td>383199.62</td>\n",
              "      <td>182901.99</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>142107.34</td>\n",
              "      <td>91391.77</td>\n",
              "      <td>366168.42</td>\n",
              "      <td>166187.94</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   R&D Spend  Administration  Marketing Spend     Profit  Florida  New York\n",
              "0  165349.20       136897.80        471784.10  192261.83        0         1\n",
              "1  162597.70       151377.59        443898.53  191792.06        0         0\n",
              "2  153441.51       101145.55        407934.54  191050.39        1         0\n",
              "3  144372.41       118671.85        383199.62  182901.99        0         1\n",
              "4  142107.34        91391.77        366168.42  166187.94        1         0"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 17
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vEzqCMijY1FR"
      },
      "source": [
        "X = df.drop('Profit',axis=1).values\r\n",
        "y = df['Profit'].values"
      ],
      "execution_count": 18,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "g1qBj2weZAHM"
      },
      "source": [
        "#Fitting Multiple REgression."
      ],
      "execution_count": 22,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "CeWXaIuSZRJ0"
      },
      "source": [
        "from sklearn.model_selection import train_test_split\r\n",
        "X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)"
      ],
      "execution_count": 26,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "o1NesBfxZTDj",
        "outputId": "5ef41e8f-affd-4b3f-a923-97f335b278fd"
      },
      "source": [
        "from sklearn.linear_model import LinearRegression\r\n",
        "regressor = LinearRegression()\r\n",
        "regressor.fit(X_train, Y_train)"
      ],
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 27
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-s-7_R3nZhAK"
      },
      "source": [
        "#Note that there's no assignment in the Fit step."
      ],
      "execution_count": 28,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VE57cI0oZkpj"
      },
      "source": [
        "yp = regressor.predict(X_test)"
      ],
      "execution_count": 29,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 335
        },
        "id": "6gg7gBv1ZoUT",
        "outputId": "a1990b96-6910-4245-d1b1-eb3e53838562"
      },
      "source": [
        "sns.regplot(Y_test,yp)"
      ],
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n",
            "  FutureWarning\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.axes._subplots.AxesSubplot at 0x7fbfa9261cf8>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 36
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "s1D66V-sZyLo",
        "outputId": "c4ee7905-0a50-4c88-d0d6-c3e5fde43650"
      },
      "source": [
        "Y_test"
      ],
      "execution_count": 37,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([103282.38, 144259.4 , 146121.95,  77798.83, 191050.39, 105008.31,\n",
              "        81229.06,  97483.56, 110352.25, 166187.94])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 37
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KUmdawtwaHIJ",
        "outputId": "3967fa31-7798-4be6-dba7-c75715c685f9"
      },
      "source": [
        "yp"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([103015.20159796, 132582.27760816, 132447.73845174,  71976.09851258,\n",
              "       178537.48221055, 116161.24230165,  67851.69209676,  98791.73374687,\n",
              "       113969.43533012, 167921.0656955 ])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 38
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XnOIrLeVaJBd"
      },
      "source": [
        "from sklearn.metrics import mean_squared_error"
      ],
      "execution_count": 41,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "OUAizblbaPmr"
      },
      "source": [
        "rmse = mean_squared_error(Y_test,yp)**0.5"
      ],
      "execution_count": 43,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "BH-KilqOaRup",
        "outputId": "dbbd50e9-b635-4c30-cc40-cafb3b058d3b"
      },
      "source": [
        "rmse"
      ],
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "9137.990152794944"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 44
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9LQhX6UaabtJ",
        "outputId": "5ba1e93c-f522-426e-bca2-06803d87feb0"
      },
      "source": [
        "100*rmse/Y_test.mean()"
      ],
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "7.473163176248041"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 46
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "o2Ajib8rad0y"
      },
      "source": [
        "# This is a Qualitative Error"
      ],
      "execution_count": 47,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lJzsI3VAaljh"
      },
      "source": [
        "#Our Model has a 7.5% Error. \r\n",
        "#It is 92.5% correct/accurate."
      ],
      "execution_count": 48,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "31TmLHMdarge"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}